package br.com.dallasmotopecas.comum.promocao.controller;

import java.sql.Connection;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.promocao.model.PromocaoTipoModel;
import br.com.dallasmotopecas.comum.promocao.vo.PromocaoTipoVo;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.lang.StringUtil;

public class PromocaoTipoController extends AbstractController
{
	public PromocaoTipoController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}

	public PromocaoTipoController(Connection connection) throws ConexaoException
	{
		super(connection);
	}
	
	private void campoObrigatorio(final PromocaoTipoVo promocaoTipoVo) throws CampoObrigatorioException
	{
		if (promocaoTipoVo.getDescricao() == null || StringUtil.getStringEspacoExcedente(promocaoTipoVo.getDescricao()).isEmpty())
			throw new CampoObrigatorioException("Por favor Preencha a Descricao");
	}
	
	public void inserirTipo(final PromocaoTipoVo promocaoTipoVo) throws CampoObrigatorioException, InserirObjetoException
	{
		PromocaoTipoModel promocaoTipoModel = null;
		try
		{
			synchronized (PromocaoTipoVo.class)
			{
				if (promocaoTipoVo != null)
				{
					campoObrigatorio(promocaoTipoVo);
					promocaoTipoModel = new PromocaoTipoModel(getConnection());
					promocaoTipoModel.inserirTipo(promocaoTipoVo);
				}
			}
		}
		catch(InserirObjetoException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			promocaoTipoModel = null;
		}
	}
	
	public void alterarTipo(final PromocaoTipoVo promocaoTipoVo) throws CampoObrigatorioException, AlterarObjetoException
	{
		PromocaoTipoModel promocaoTipoModel = null;
		try
		{
			synchronized (PromocaoTipoVo.class)
			{
				if (promocaoTipoVo != null)
				{
					campoObrigatorio(promocaoTipoVo);
					promocaoTipoModel = new PromocaoTipoModel(getConnection());
					promocaoTipoModel.alterarTipo(promocaoTipoVo);
				}
			}
		}
		catch(AlterarObjetoException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			promocaoTipoModel = null;
		}
	}
	
	public void carregarListaTipo(final List<PromocaoTipoVo> listaTipo) throws ListarObjetoException
	{
		PromocaoTipoModel promocaoTipoModel = null;
		try
		{
			if (listaTipo != null)
			{
				listaTipo.clear();
				promocaoTipoModel = new PromocaoTipoModel(getConnection());
				listaTipo.addAll(promocaoTipoModel.getListaTipo());
			}
		}
		catch(ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			promocaoTipoModel = null;
		}
	}
}
